package leetcode.code0494;

public class Solution extends Solution494 {

	private int ans; // 答案
	private int target; // 目标
	private int len; // 数组长度

	@Override
	public int findTargetSumWays(int[] nums, int target) {
		this.ans = 0; // 答案
		this.target = target; // 目标
		this.len = nums.length; // 数组长度
		this.findTargetSumWays(nums, 0, 0);
		return ans;
	}

	/**
	 * @param nums  原始数组, 始终不变
	 * @param index 当前尝试的原始数组第几位, 从0开始, 到len结束
	 * @param sum   index前尝试的`和`
	 */
	private void findTargetSumWays(int[] nums, int index, int sum) {
		if (index == this.len) {// 完成一种尝试
			if (sum == this.target) {// 结果 == 目标 则答案++
				ans++;
			}
			return;
		}
		int next = index + 1; // 下一个index
		this.findTargetSumWays(nums, next, sum + nums[index]);// 当前index前插入+ , 后续决定
		this.findTargetSumWays(nums, next, sum - nums[index]);// 当前index前插入- , 后续决定
	}

	public static void main(String[] args) {
		Solution so = new Solution();
		so.debug1();
		so.debug2();

	}

}
